package com.example.dllo.my36kr.tools;

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;

/**
 * Created by dllo on 16/8/29.
 * 自定义 Drawable 处理成圆形图片
 * Drawable 与自定义View区别
 * Drawable 只能决定画在屏幕上的东西是个什么样子
 * 它是抽象的 我们不能再自定义Drawable里处理
 * View 的事件,逻辑
 * Drawable 的好处,它不需要改动原始的组件
 *
 */
public class CircleDrawable extends Drawable {
    private Bitmap mBitmap;//要处理的源图片
    private Paint mPaint;//画笔 来画图片
    private int r;//圆形的半径

    public CircleDrawable(Bitmap mBitmap) {
        this.mBitmap = mBitmap;
        //r 半径为图片宽高最小值的一半
        r = Math.max(mBitmap.getWidth(),mBitmap.getHeight()) / 2;
        mPaint = new Paint();
        mPaint.setAntiAlias(true);//设置抗锯齿
        //将图片 处理成 shader 之后 设置给画笔
        //接收三个参数  第一个参数 是图片
        //第二 三个参数 是图片的重复属性,选中ClAMP ,不重复
        BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        //设置画笔shader 属性,可以理解为 画笔的花纹,用这个画笔画出的东西
        //花纹就是我们的图片 所以直接画个圆,就是个圆形图片
        mPaint.setShader(bitmapShader);

    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawCircle(r,r,r,mPaint);
    }

    @Override
    public int getIntrinsicWidth() {
        return r * 2;
    }

    @Override
    public int getIntrinsicHeight() {
        return r * 2;
    }

    @Override
    public void setAlpha(int alpha) {
        mPaint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter colorFilter) {
        mPaint.setColorFilter(colorFilter);

    }

    @Override
    public int getOpacity() {
        return 0;
    }
}
